////给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。 
////
//// 
////
//// 示例 1: 
////
//// 
////输入: s = "abcabcbb"
////输出: 3 
////解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
//// 
////
//// 示例 2: 
////
//// 
////输入: s = "bbbbb"
////输出: 1
////解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
//// 
////
//// 示例 3: 
////
//// 
////输入: s = "pwwkew"
////输出: 3
////解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
//// 请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
//// 
////
//// 
////
//// 提示： 
////
//// 
//// 0 <= s.length <= 5 * 10⁴ 
//// s 由英文字母、数字、符号和空格组成 
//// 
//// Related Topics 哈希表 字符串 滑动窗口 👍 7448 👎 0
//


package com.rising.leetcode.editor.cn;

import java.util.HashMap;
import java.util.Map;

/**
 * 无重复字符的最长子串
 * @author DY
 * @date 2022-04-26 17:30:50
 */
public class P3_LongestSubstringWithoutRepeatingCharacters{
    public static void main(String[] args) {
        //测试代码
        Solution solution = new P3_LongestSubstringWithoutRepeatingCharacters().new Solution();
        //System.out.println(solution.lengthOfLongestSubstring("abcabcbb"));
        //System.out.println(solution.lengthOfLongestSubstring("bbbbb"));
        /*System.out.println(solution.lengthOfLongestSubstring("dvdf"));
        System.out.println(solution.lengthOfLongestSubstring("avvbofjkelv"));
        System.out.println(solution.lengthOfLongestSubstring("abcbcbdb"));
        System.out.println(solution.lengthOfLongestSubstring("abba"));*/
        System.out.println(solution.lengthOfLongestSubstring("tmkjmyuioksx"));
    }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int lengthOfLongestSubstring(String s) {
        char[] chars = s.toCharArray();
        int max = 0;//最长
        int startIndex = 0;
        Map<Character, Integer> map = new HashMap<>(); //临时存放字符，用于判重
        for (int i = 0; i < chars.length; i++) {
            if (map.get(chars[i]) != null) { //重复
                startIndex = Math.max(map.get(chars[i]), startIndex);
            }
            max = Math.max(max, i - startIndex + 1) ;
            map.put(chars[i], i + 1);//当前字符下一个位置开始不重复
        }
        return max;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
